import { apiWreit } from '@/Ulter/AxiosHepler'
import { ElMessage } from 'element-plus'

// 网络连接测试工具
export class NetworkTest {
  // 测试后端服务连接
  static async testBackendConnection(): Promise<boolean> {
    try {
      console.log('正在测试后端服务连接...')
      
      // 尝试访问一个简单的健康检查端点
      const response = await fetch('http://localhost:34405/api/health', {
        method: 'GET',
        timeout: 5000
      } as any)
      
      if (response.ok) {
        console.log('后端服务连接正常')
        return true
      } else {
        console.warn('后端服务响应异常:', response.status)
        return false
      }
    } catch (error) {
      console.error('后端服务连接失败:', error)
      return false
    }
  }

  // 测试API端点
  static async testApiEndpoint(endpoint: string): Promise<boolean> {
    try {
      console.log(`正在测试API端点: ${endpoint}`)
      
      const response = await apiWreit.get(endpoint)
      console.log(`API端点 ${endpoint} 测试成功`)
      return true
    } catch (error) {
      console.error(`API端点 ${endpoint} 测试失败:`, error)
      return false
    }
  }

  // 显示网络状态
  static showNetworkStatus() {
    if (navigator.onLine) {
      console.log('网络连接正常')
      ElMessage.success('网络连接正常')
    } else {
      console.warn('网络连接断开')
      ElMessage.error('网络连接断开，请检查网络设置')
    }
  }

  // 综合网络诊断
  static async diagnoseNetwork() {
    console.log('开始网络诊断...')
    
    // 1. 检查浏览器网络状态
    if (!navigator.onLine) {
      ElMessage.error('网络连接断开，请检查网络设置')
      return false
    }

    // 2. 测试后端服务连接
    const backendOk = await this.testBackendConnection()
    if (!backendOk) {
      ElMessage.error('无法连接到后端服务，请确保服务器正在运行 (http://localhost:34405)')
      return false
    }

    // 3. 测试常用API端点
    const testEndpoints = [
      '/api/Mange/GetCaptcha/captcha',
      '/api/Mange/LoginUser'
    ]

    for (const endpoint of testEndpoints) {
      const endpointOk = await this.testApiEndpoint(endpoint)
      if (!endpointOk) {
        ElMessage.warning(`API端点 ${endpoint} 可能存在问题`)
      }
    }

    ElMessage.success('网络诊断完成')
    return true
  }
}

// 监听网络状态变化
export function setupNetworkMonitoring() {
  window.addEventListener('online', () => {
    console.log('网络已连接')
    ElMessage.success('网络已恢复连接')
  })

  window.addEventListener('offline', () => {
    console.log('网络已断开')
    ElMessage.error('网络连接已断开')
  })
}
